클로드 코드 완벽 가이드 — 11장 MCP 사용하기 딥다이브 학습 노트

출처: 클로드 코드 완벽 가이드 (코드팩토리 최지호) | 참고: https://github.com/codefactory-co


11장에서 다루는 내용

  • MCP(Model Context Protocol)란? — LLM이 외부 시스템과 소통하는 오픈소스 프로토콜
  • MCP 서버 설정하기 — 세 가지 전송 방식(stdio, SSE, HTTP)으로 서버 추가
  • MCP 서버 관리하기 — 등록된 서버 목록 확인, 전송 방식별 비교 및 선택 기준

전체 흐름도

[문제 인식: LLM이 대화창 안에만 갇혀 있다]
    |
    v
+--------------------------------------------+
| MCP (Model Context Protocol)               |
| = LLM ↔ 외부 세계를 연결하는 다리           |
| 앤트로픽이 만든 오픈소스 프로토콜             |
| 클라이언트-서버 구조의 개방형 프로토콜        |
+--------------------------------------------+
    |
    v
[MCP 서버 설정하기: claude mcp 명령어]
    |
    +----------+-----------+-----------+
    |          |           |           |
    v          v           v           |
+--------+ +--------+ +--------+     |
| stdio  | | SSE    | | HTTP   |     |
| 로컬   | | 원격   | | 원격   |     |
| 프로세스| | Push   | | 요청/  |     |
| 실행   | | 방식   | | 응답   |     |
+--------+ +--------+ +--------+     |
    |          |           |           |
    v          v           v           |
+--------------------------------------------+
| 추가 방법 2가지                              |
| (1) 커맨드: claude mcp add ...              |
| (2) 직접 편집: .mcp.json 파일 수정           |
+--------------------------------------------+
    |
    v
[claude mcp list 로 연동 확인]
    |
    v
+--------------------------------------------+
| 전송 방식 비교표                              |
| stdio → 로컬, 빠름, 업데이트 수동             |
| SSE   → 원격, 지속연결, 실시간 스트리밍       |
| HTTP  → 원격, 요청/응답, API 연동            |
+--------------------------------------------+

선수 지식 체크리스트

  • [ ] 클로드 코드 기본 사용법 (설치, 실행, 슬래시 커맨드)
  • [ ] JSON 파일 구조 이해 (key-value, 중첩 객체)
  • [ ] 터미널 명령어 기초 (npx, 패키지 실행)
  • [ ] 클라이언트-서버 개념 (요청-응답, 프로세스 간 통신)
  • [ ] API란 무엇인지 기본 이해

핵심 키워드

키워드 의미
MCP Model Context Protocol의 약자. LLM이 데이터베이스, API, 파일 시스템 등 외부 도구에 접근할 수 있도록 설계된 클라이언트-서버 구조의 오픈소스 프로토콜
stdio Standard Input/Output(표준 입출력). 로컬 프로세스를 직접 실행하여 양방향 통신하는 MCP 전송 방식
SSE Server-Sent Events. 서버가 클라이언트에게 지속적으로 데이터를 밀어주는(Push) 단방향 통신 기술
HTTP 웹에서 가장 널리 쓰이는 요청-응답 방식의 통신. MCP에서는 스트리밍을 지원하는 HTTP 서버를 의미
.mcp.json MCP 서버 설정 정보를 저장하는 JSON 파일. mcpServers 객체 안에 각 서버의 type, command, args 등을 정의
claude mcp add 클로드 코드에서 MCP 서버를 등록하는 CLI 명령어
claude mcp list 등록된 MCP 서버 목록을 확인하는 CLI 명령어
전송 방식(Transport) MCP 서버가 클라이언트와 통신하는 방법. stdio, SSE, HTTP 세 가지가 존재

11-1 MCP란?

한 줄 요약

MCP(Model Context Protocol)는 LLM이 대화창을 벗어나 외부 데이터베이스, API, 파일 시스템과 직접 상호작용할 수 있게 해주는 앤트로픽의 오픈소스 프로토콜이다.

쉬운 설명 (통역사 비유)

"외국에 혼자 가면 현지인과 대화할 수 없다. 하지만 통역사가 있으면 어떤 사람과도 소통할 수 있다. MCP는 LLM을 위한 '만능 통역사'다. 깃허브, 데이터베이스, 파일 시스템 — 어떤 외부 서비스든 MCP를 통해 LLM이 직접 대화할 수 있게 해준다."

핵심 포인트

  1. MCP의 정의: LLM이 데이터베이스, API, 파일 시스템 같은 외부 도구 및 데이터 소스에 접근할 수 있도록 설계된 클라이언트-서버 구조의 개방형 프로토콜
  2. 만든 곳: 앤트로픽 (Anthropic) — 클로드를 만든 회사가 직접 설계한 오픈소스 프로토콜
  3. 핵심 가치: 클로드 코드가 여러 전문 서버에 동시에 연결하여 확장된 작업을 수행

실무 예제

MCP 없을 때 vs 있을 때 비교:

❌ MCP 없이 (수동 작업)
개발자: "깃허브 이슈 #42 내용 알려줘"
클로드: "저는 깃허브에 접근할 수 없습니다..."
개발자: (브라우저에서 직접 이슈 확인 → 내용 복사 → 클로드에 붙여넣기)

✅ MCP 있을 때 (자동 연동)
개발자: "깃허브 이슈 #42 내용 알려줘"
클로드: (MCP로 깃허브 API 호출 → 이슈 조회)
       "이슈 #42는 로그인 페이지 버그입니다. 관련 PR을 생성할까요?"

MCP로 할 수 있는 일들:

- 깃허브 이슈 생성/조회/관리
- 데이터베이스 스키마 질의 및 데이터 조회
- 원격 서버의 이슈 분석
- API 문서 실시간 참조
- 파일 시스템 접근 및 프로젝트 관리

체크포인트

  • [ ] MCP가 Model Context Protocol의 약자라는 것을 기억하는가?
  • [ ] MCP가 클라이언트-서버 구조라는 것을 설명할 수 있는가?
  • [ ] MCP가 없을 때와 있을 때의 차이를 비유로 설명할 수 있는가?
  • [ ] MCP를 통해 클로드가 접근할 수 있는 외부 시스템 3가지 이상을 나열할 수 있는가?

11-2 MCP 서버 설정하기

한 줄 요약

claude mcp 명령어 또는 .mcp.json 파일 직접 편집으로 세 가지 전송 방식(stdio, SSE, HTTP) 중 하나를 선택하여 MCP 서버를 등록한다.

쉬운 설명 (TV 연결 비유)

"TV에 게임기를 연결하는 방법이 여러 가지다. HDMI(직접 꽂기=stdio), 와이파이 캐스트(계속 연결=SSE), 블루투스(필요할 때 연결=HTTP). MCP 서버도 마찬가지로, 상황에 맞는 연결 방식을 골라서 쓴다."

핵심 포인트

  1. 세 가지 전송 방식: stdio(로컬), SSE(원격, Push), HTTP(원격, 요청/응답)
  2. 서버 추가 방법 2가지: CLI 커맨드(claude mcp add) 또는 .mcp.json 파일 직접 편집
  3. 기본값은 stdio: --transport 플래그 없이 추가하면 자동으로 stdio 방식

실무 예제

방법 1: 커맨드로 추가 (stdio)

# 문법
claude mcp add <name> <command> [args...]

# 예제: Context7 MCP 서버 추가
claude mcp add context7 -- npx -y @upstash/context7-mcp

방법 2: .mcp.json에 직접 추가 (stdio)

{
  "mcpServers": {
    "context7": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@upstash/context7-mcp"
      ],
      "env": {}
    }
  }
}

SSE 방식으로 추가:

# 커맨드
claude mcp add --transport sse context7 https://mcp.context7.com/sse

# .mcp.json
{
  "mcpServers": {
    "context7": {
      "type": "sse",
      "url": "https://mcp.context7.com/sse"
    }
  }
}

HTTP 방식으로 추가:

# 커맨드
claude mcp add --transport http context7 https://mcp.context7.com/sse

# .mcp.json
{
  "mcpServers": {
    "context7": {
      "type": "http",
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"],
      "env": {}
    }
  }
}

자주 하는 실수:

❌ 잘못된 예
claude mcp add context7 npx -y @upstash/context7-mcp
→ "-y"가 claude mcp의 플래그로 해석될 수 있음

✅ 올바른 예
claude mcp add context7 -- npx -y @upstash/context7-mcp
→ "--" 뒤의 인자는 모두 MCP 서버 명령으로 전달

체크포인트

  • [ ] claude mcp add 커맨드의 기본 문법을 작성할 수 있는가?
  • [ ] .mcp.json 파일의 기본 구조(mcpServers, type, command, args)를 설명할 수 있는가?
  • [ ] SSE 추가 시 --transport sse 플래그가 필요하다는 것을 아는가?
  • [ ] stdio와 SSE/HTTP의 .mcp.json 구조 차이를 설명할 수 있는가?

11-3 MCP 전송 방식 비교 및 선택

한 줄 요약

stdio는 로컬에서 빠르게, SSE는 실시간 데이터 스트리밍용으로, HTTP는 일반적인 원격 API 연동용으로 사용하며, 가장 많이 쓰이는 방식은 stdio이다.

쉬운 설명 (배달 방식 비유)

"음식 배달에 비유하면: stdio는 집에서 직접 요리(로컬, 빠름), SSE는 뷔페 식당(한 번 연결하면 계속 음식이 나옴), HTTP는 배달앱 주문(필요할 때마다 주문-배달)이다."

핵심 포인트

구분 stdio 서버 SSE 서버 HTTP 서버
실행 위치 로컬 컴퓨터 원격 서버 원격 서버
통신 방향 양방향 (프로세스 통신) 단방향 (서버 → 클라이언트) 양방향 (요청/응답)
연결 방식 프로세스 실행 지속적 연결 요청 기반 연결
핵심 용도 로컬 도구 및 스크립트 연동 실시간 데이터 스트리밍 일반적인 원격 API 연동
네트워크 불필요 필요 필요
지연 시간 매우 낮음 상대적으로 높음 상대적으로 높음
버전 관리 수동 업데이트 필요 항상 최신 버전 항상 최신 버전

실무 예제

상황별 올바른 선택:

Q: 로컬 파일 시스템을 읽고 쓰는 MCP 서버를 연결하고 싶다
A: ✅ stdio → 로컬 프로세스로 직접 실행, 네트워크 불필요

Q: 원격 서버에서 실시간 로그를 모니터링하고 싶다
A: ✅ SSE → 서버가 지속적으로 데이터를 밀어줌(Push)

Q: REST API를 제공하는 외부 서비스와 연동하고 싶다
A: ✅ HTTP → 일반적인 요청/응답 패턴

등록된 MCP 서버 확인:

> claude mcp list
tosspayments-integration-guide: npx -y @tosspayments/integration-guide-mcp@latest
context7: https://mcp.context7.com/sse (SSE)

선택 기준 정리

"어떤 전송 방식을 써야 할까?"

(1) 로컬 도구/스크립트 연동? → stdio (기본값, 가장 많이 사용)
(2) 원격 서버의 실시간 데이터? → SSE
(3) 일반적인 원격 API 연동? → HTTP
(4) 잘 모르겠으면? → stdio (기본값으로 시작)

체크포인트

  • [ ] 세 가지 전송 방식의 이름과 특징을 각각 설명할 수 있는가?
  • [ ] stdio가 가장 많이 사용되는 이유를 설명할 수 있는가?
  • [ ] claude mcp list로 등록된 서버를 확인하는 방법을 아는가?
  • [ ] 주어진 상황에 맞는 전송 방식을 선택할 수 있는가?

연습 문제

문제 1: MCP 개념 이해 (기본)

Q: MCP가 없는 상태에서 클로드에게 "우리 데이터베이스의 users 테이블 구조를 알려줘"라고 하면 어떻게 되는가? MCP가 있다면 어떻게 달라지는가?

정답 보기 **MCP 없을 때:** 클로드는 데이터베이스에 접근할 수 없으므로 "접근 권한이 없습니다"라고 응답한다. 개발자가 직접 DB에 접속하여 스키마를 복사한 뒤 클로드에게 붙여넣어야 한다. **MCP 있을 때:** 데이터베이스 MCP 서버가 연결되어 있으면, 클로드가 MCP를 통해 직접 DB 스키마를 질의하고 "users 테이블은 id(INTEGER), name(VARCHAR), email(VARCHAR)..." 형태로 즉시 답변한다. **핵심:** MCP는 LLM이 외부 시스템에 직접 접근하는 "다리" 역할을 한다.

문제 2: 서버 설정 실습 (중급)

Q: 다음 조건을 만족하는 .mcp.json 파일을 작성하라. - 서버 이름: my-db - 전송 방식: stdio - 실행 명령: npx - 인자: -y, @my-org/db-mcp-server - 환경 변수: DB_HOSTlocalhost로 설정

정답 보기
{
  "mcpServers": {
    "my-db": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@my-org/db-mcp-server"
      ],
      "env": {
        "DB_HOST": "localhost"
      }
    }
  }
}
**포인트:** env 객체에 환경 변수를 key-value로 지정한다. stdio 방식이므로 로컬에서 프로세스로 실행된다.

문제 3: 전송 방식 선택 (심화)

Q: 다음 세 가지 시나리오에서 각각 어떤 전송 방식을 선택해야 하는지, 그 이유와 함께 설명하라. 1. 로컬 파일을 분석하는 린트 도구를 MCP로 연결하고 싶다 2. SaaS 결제 서비스의 API 문서를 실시간으로 참조하고 싶다 3. CI/CD 파이프라인의 빌드 상태를 실시간으로 모니터링하고 싶다

정답 보기 1. **stdio** — 린트 도구는 로컬 파일을 읽는 것이므로 네트워크가 불필요하다. 로컬 프로세스로 실행하면 지연 시간이 최소화된다. 2. **HTTP** — SaaS API 문서 참조는 전형적인 요청-응답 패턴이다. 필요할 때만 API를 호출하면 되므로 지속적 연결이 불필요하다. 3. **SSE** — 빌드 상태는 서버 쪽에서 변경 사항이 발생할 때마다 클라이언트에 알려줘야 하므로 서버→클라이언트 Push 방식인 SSE가 적합하다. **선택 원칙:** 로컬이면 stdio, 실시간 Push면 SSE, 요청/응답이면 HTTP.

문제 4: 트러블슈팅 (심화)

Q: claude mcp add 명령으로 MCP 서버를 추가했는데 claude mcp list에 표시되지 않는다. 원인과 해결 방법을 3가지 이상 제시하라.

정답 보기 1. **명령어 오타**: `claude mcp add` 대신 `cluade`처럼 오타가 있으면 등록 자체가 실패한다. → 에러 메시지를 확인하고 정확히 입력한다. 2. **`--` 누락**: `claude mcp add context7 npx -y ...`처럼 `--`를 빼면 `-y`가 claude의 플래그로 해석될 수 있다. → `claude mcp add context7 -- npx -y ...`로 수정한다. 3. **패키지 미설치/경로 문제**: npx가 해당 패키지를 찾지 못하면 서버가 등록되지 않을 수 있다. → npm 패키지명이 정확한지, Node.js/npx가 설치되어 있는지 확인한다. 4. **설정 파일 충돌**: `.mcp.json`을 직접 편집하면서 JSON 문법 오류(쉼표 누락, 중괄호 불일치 등)가 발생했을 수 있다. → JSON 유효성 검사기로 문법을 확인한다.

부록 A: 용어 사전

용어 설명
MCP (Model Context Protocol) LLM이 외부 데이터 소스 및 도구에 접근하도록 설계된 클라이언트-서버 구조의 오픈소스 프로토콜
stdio (Standard I/O) 표준 입력/출력을 사용하여 로컬 프로세스와 양방향 통신하는 방식
SSE (Server-Sent Events) 서버가 클라이언트에게 단방향으로 지속적으로 데이터를 Push하는 통신 기술
HTTP (HyperText Transfer Protocol) 웹에서 클라이언트-서버 간 요청/응답 기반 통신을 위한 프로토콜
.mcp.json MCP 서버 연결 정보를 저장하는 설정 파일. mcpServers 객체 내에 서버별 설정 포함
mcpServers .mcp.json 파일의 최상위 객체. 각 MCP 서버 설정을 이름으로 그룹화
transport MCP에서 클라이언트와 서버 간 데이터 전송 방식을 의미 (stdio/SSE/HTTP)
claude mcp add MCP 서버를 등록하는 CLI 명령어
claude mcp list 등록된 MCP 서버 목록을 확인하는 CLI 명령어
npx npm 패키지를 설치하지 않고 바로 실행하는 Node.js 도구
Push 통신 서버가 클라이언트의 요청 없이도 자발적으로 데이터를 보내는 방식 (SSE)
요청/응답 통신 클라이언트가 요청하면 서버가 응답하는 전통적 통신 방식 (HTTP)

부록 B: 비교표

B-1. MCP 전송 방식 3종 비교

항목 stdio SSE HTTP
실행 위치 로컬 컴퓨터 원격 서버 원격 서버
통신 방향 양방향 단방향 (서버→클라이언트) 양방향 (요청/응답)
연결 방식 프로세스 실행 지속적 연결 요청 기반 연결
핵심 용도 로컬 도구/스크립트 연동 실시간 데이터 스트리밍 일반적 원격 API 연동
네트워크 필요 아니오
지연 시간 매우 낮음 상대적으로 높음 상대적으로 높음
버전 관리 수동 업데이트 자동 (항상 최신) 자동 (항상 최신)
사용 빈도 가장 많음 보통 보통

B-2. MCP 서버 추가 방법 비교

항목 CLI 커맨드 방식 .mcp.json 직접 편집
명령어 claude mcp add <name> ... 텍스트 에디터로 파일 편집
장점 빠르고 간편 여러 서버를 한 번에 설정 가능
단점 한 번에 하나씩만 추가 JSON 문법 오류 가능성
적합한 상황 서버 하나를 빠르게 추가할 때 프로젝트 초기 세팅, 팀 공유 시

B-3. MCP vs CLAUDE.md vs 커스텀 슬래시 커맨드 비교

항목 MCP CLAUDE.md 커스텀 슬래시 커맨드
역할 외부 시스템 연동 프로젝트 규칙/지침 반복 프롬프트 자동화
비유 만능 통역사 사내 규칙집 업무 매뉴얼
적용 범위 외부 API/DB/파일 시스템 프로젝트 전반 특정 작업 호출 시
설정 파일 .mcp.json CLAUDE.md .claude/commands/*.md

부록 C: 참고 자료

  • MCP 공식 사이트: https://modelcontextprotocol.io — MCP 프로토콜 공식 문서 및 스펙
  • MCP GitHub: https://github.com/modelcontextprotocol — 프로토콜 구현체 및 SDK
  • 책 유튜브 강의: https://bit.ly/3J4as96 — 11장 영상 강의
  • 코드팩토리 GitHub: https://github.com/codefactory-co — 저자 예제 코드
  • Context7 MCP: https://mcp.context7.com — 예제에 사용된 MCP 서버
  • Anthropic MCP 블로그: https://www.anthropic.com/news/model-context-protocol — MCP 발표 포스트
난이도
에피소드
질문
카드를 로딩 중...
답변

클릭하거나 Space를 눌러 뒤집기

0 / 0
학습 진도 0%
이동   Space 뒤집기   R 셔플